3.5.6 DRAM間接参照
DRAMが関わる任意のMV命令はDRAM間接参照モードをオンにできる。
DRAM間接参照モードでは、l2bmdars/l2bmdarwの2つのL2BM命令(3.6.7.10l2bmdars/l2bmdarw-DARへの書き込み)によってあらかじめDAR (DRAMアドレスレジスタ)に書き込んでおいたアドレス値を用いる。
DARはグループごとに存在する。
よって、グループごとに異なるDRAMアドレスにアクセスすることが可能である。
DARは2ビットのアドレス語を1エントリとして4エントリからなる。
アドレス語の単位は6長語である*^2 。
間接参照の単位は6長語である。
すなわち、MV命令の基本モードに関わらず、DRAMに6長語アクセスするごとに次のアドレス語を用いる。
DRAM間接参照モードをオンにしたMV命令では、DAR読み出し開始アドレスMとDARエントリ連続使用回数Nの2つのパラメータを指定する。
このとき、6長語アクセスの回数iに対し、6長語単位DRAMアドレスの最終的な値はDAR$ [(\frac{M+i}N)\%1024]+i\%N となる。
すなわち、N回の間はDARのあるエントリの値をオフセットとしてDRAMを連続アクセスし、その後DARの次のエントリの値を新たなオフセットとし、以降繰り返す。
l2bmdarw命令によりDARに書き込んだデータが有効になる直前のサイクルまではそのDARのエントリからは前のデータが読める。
MはDRAMオペランドで指定する(3.5.2.2 d-DRAM)。
NはMV命令のオプション部でndの形式で指定する。
ndを省略した場合Nは無限大、すなわちアドレスはDAR$ [M] +i となる。3.5.8 MV命令の基本モードで述べるMV命令の基本モードの解説ではDRAM間接参照モード時の記述は省略する。
code:例
mvp/n256nd4 $p1600@1 $di512@2
これは3.5.8.2PDM→DRAM単独個別転送命令で述べるPDM→DRAM単独個別転送命令のDRAM間接参照モード版である。
code:txt
for i= 0:16
uint_t src_addr= 1600 + 16 *i
uint_t dst_addr= 16 * (MEM2.dar512+i/4 + (i% 4))
LongWord data16 = MEM1.pdmsrc_addr:src_addr+16
MEM2.dramdst_addr:dst_addr+16 = data0:16
*^2 16長語× 32 ビット分の容量のDRAMが実装されているわけではない。
実装されていない領域に相当するビットは無視される。